PDIE8 - Processamento Digital de Imagem¶

Capa

Repositorio dos Códigos feitos em aula da Disciplina¶

Feito por: Vinicius de Souza Santos¶

Lecionado por: Murilo Varges¶

Aula 7 - 11/09 - Domínio da Frequência¶

  • Domínio da frequência

  • Transformada de Fourier

  • Filtragem no domínio da frequência

    Atividades - Transformada de Fourier¶

    • Implementar a Transformada de Fourier (Utilize a biblioteca de sua preferência)
    • Plotar o espectro e fase.
    • Plotar o espectro 3D (Pesquisar formas de visualização 3D em Python)
      • Utilizar as imagens disponibilizadas na aula (Images_fourier.rar)
      • Criar uma imagem fundo branco e um quadrado simulando a função SINC
    • Plotar Original

Plotando Espectro e Fase¶

Importando Bibliotecas

In [ ]:
import numpy as np
import matplotlib.pyplot as plt
import cv2

Imagem Lena

In [ ]:
imgLen = cv2.imread("/Meu Drive/Faculdade/Aula/2023.2/Processamento Digital de Imagem/Aulas/Aula 7/image/lena.png", cv2.IMREAD_GRAYSCALE)

Processamento para cada imagem

In [ ]:
# Função para calcular a Transformada de Fourier 2D e plotar a imagem original, o espectro e a fase
def calcular_e_plotar_fft(imagem, titulo):
    # Calcule a Transformada de Fourier 2D da imagem
    transformada_fourier = np.fft.fft2(imagem)

    # Calcule o espectro de magnitude
    espectro_magnitude = np.abs(transformada_fourier)

    # Calcule a fase
    fase = np.angle(transformada_fourier)

    # Plote a imagem original, o espectro de magnitude e a fase
    plt.figure(figsize=(18, 4))
    
    plt.subplot(1, 3, 1)
    plt.imshow(imagem, cmap='gray')
    plt.title('Imagem Original')
    
    plt.subplot(1, 3, 2)
    plt.imshow(np.log(1 + espectro_magnitude), cmap='gray')
    plt.title('Espectro de Magnitude')
    plt.colorbar()

    plt.subplot(1, 3, 3)
    plt.imshow(fase, cmap='gray')
    plt.title('Fase')
    plt.colorbar()

    plt.tight_layout()
    plt.show()

# Chamada da função para cada imagem
calcular_e_plotar_fft(imgLen, "imgLen")
No description has been provided for this image

Imagem Car

In [ ]:
imgCar = cv2.imread("/Meu Drive/Faculdade/Aula/2023.2/Processamento Digital de Imagem/Aulas/Aula 7/image/car.tif", cv2.IMREAD_GRAYSCALE)
In [ ]:
# Função para calcular a Transformada de Fourier 2D e plotar a imagem original, o espectro e a fase
def calcular_e_plotar_fft(imagem, titulo):
    # Calcule a Transformada de Fourier 2D da imagem
    transformada_fourier = np.fft.fft2(imagem)

    # Calcule o espectro de magnitude
    espectro_magnitude = np.abs(transformada_fourier)

    # Calcule a fase
    fase = np.angle(transformada_fourier)

    # Plote a imagem original, o espectro de magnitude e a fase
    plt.figure(figsize=(18, 4))
    
    plt.subplot(1, 3, 1)
    plt.imshow(imagem, cmap='gray')
    plt.title('Imagem Original')
    
    plt.subplot(1, 3, 2)
    plt.imshow(np.log(1 + espectro_magnitude), cmap='gray')
    plt.title('Espectro de Magnitude')
    plt.colorbar()

    plt.subplot(1, 3, 3)
    plt.imshow(fase, cmap='gray')
    plt.title('Fase')
    plt.colorbar()

    plt.tight_layout()
    plt.show()

# Chamada da função para cada imagem
calcular_e_plotar_fft(imgCar, "imgCar")
No description has been provided for this image

Imagem newspaper_shot_woman

In [ ]:
imgnewspaper_shot_woman = cv2.imread("/Meu Drive/Faculdade/Aula/2023.2/Processamento Digital de Imagem/Aulas/Aula 7/image/newspaper_shot_woman.tif", cv2.IMREAD_GRAYSCALE)
In [ ]:
# Função para calcular a Transformada de Fourier 2D e plotar a imagem original, o espectro e a fase
def calcular_e_plotar_fft(imagem, titulo):
    # Calcule a Transformada de Fourier 2D da imagem
    transformada_fourier = np.fft.fft2(imagem)

    # Calcule o espectro de magnitude
    espectro_magnitude = np.abs(transformada_fourier)

    # Calcule a fase
    fase = np.angle(transformada_fourier)

    # Plote a imagem original, o espectro de magnitude e a fase
    plt.figure(figsize=(18, 4))
    
    plt.subplot(1, 3, 1)
    plt.imshow(imagem, cmap='gray')
    plt.title('Imagem Original')
    
    plt.subplot(1, 3, 2)
    plt.imshow(np.log(1 + espectro_magnitude), cmap='gray')
    plt.title('Espectro de Magnitude')
    plt.colorbar()

    plt.subplot(1, 3, 3)
    plt.imshow(fase, cmap='gray')
    plt.title('Fase')
    plt.colorbar()

    plt.tight_layout()
    plt.show()

# Chamada da função para cada imagem
calcular_e_plotar_fft(imgnewspaper_shot_woman, "imgnewspaper_shot_woman")
No description has been provided for this image

Imagem periodic_noise

In [ ]:
imagperiodic_noise = cv2.imread("/Meu Drive/Faculdade/Aula/2023.2/Processamento Digital de Imagem/Aulas/Aula 7/image/periodic_noise.png", cv2.IMREAD_GRAYSCALE)
In [ ]:
# Função para calcular a Transformada de Fourier 2D e plotar a imagem original, o espectro e a fase
def calcular_e_plotar_fft(imagem, titulo):
    # Calcule a Transformada de Fourier 2D da imagem
    transformada_fourier = np.fft.fft2(imagem)

    # Calcule o espectro de magnitude
    espectro_magnitude = np.abs(transformada_fourier)

    # Calcule a fase
    fase = np.angle(transformada_fourier)

    # Plote a imagem original, o espectro de magnitude e a fase
    plt.figure(figsize=(18, 4))
    
    plt.subplot(1, 3, 1)
    plt.imshow(imagem, cmap='gray')
    plt.title('Imagem Original')
    
    plt.subplot(1, 3, 2)
    plt.imshow(np.log(1 + espectro_magnitude), cmap='gray')
    plt.title('Espectro de Magnitude')
    plt.colorbar()

    plt.subplot(1, 3, 3)
    plt.imshow(fase, cmap='gray')
    plt.title('Fase')
    plt.colorbar()

    plt.tight_layout()
    plt.show()

# Chamada da função para cada imagem
calcular_e_plotar_fft(imagperiodic_noise, "imagperiodic_noise")
No description has been provided for this image

Imagem sinc

In [ ]:
imagsinc = cv2.imread("/Meu Drive/Faculdade/Aula/2023.2/Processamento Digital de Imagem/Aulas/Aula 7/image/sinc.tif", cv2.IMREAD_GRAYSCALE)
In [ ]:
# Função para calcular a Transformada de Fourier 2D e plotar a imagem original, o espectro e a fase
def calcular_e_plotar_fft(imagem, titulo):
    # Calcule a Transformada de Fourier 2D da imagem
    transformada_fourier = np.fft.fft2(imagem)

    # Calcule o espectro de magnitude
    espectro_magnitude = np.abs(transformada_fourier)

    # Calcule a fase
    fase = np.angle(transformada_fourier)

    # Plote a imagem original, o espectro de magnitude e a fase
    plt.figure(figsize=(18, 4))
    
    plt.subplot(1, 3, 1)
    plt.imshow(imagem, cmap='gray')
    plt.title('Imagem Original')
    
    plt.subplot(1, 3, 2)
    plt.imshow(np.log(1 + espectro_magnitude), cmap='gray')
    plt.title('Espectro de Magnitude')
    plt.colorbar()

    plt.subplot(1, 3, 3)
    plt.imshow(fase, cmap='gray')
    plt.title('Fase')
    plt.colorbar()

    plt.tight_layout()
    plt.show()

# Chamada da função para cada imagem
calcular_e_plotar_fft(imagsinc, "imagsinc")
No description has been provided for this image

Plotar o espectro 3D (Pesquisar formas de visualização 3D em Python)¶

  - Utilizar as imagens disponibilizadas na aula (Images_fourier.rar)
  - Criar uma imagem fundo branco e um quadrado simulando a função SINC

Importando Bibliotecas

In [ ]:
import numpy as np
import matplotlib.pyplot as plt
import cv2
from mpl_toolkits.mplot3d import Axes3D

Carregando as imagens

In [ ]:
imgCar = cv2.imread("/Meu Drive/Faculdade/Aula/2023.2/Processamento Digital de Imagem/Aulas/Aula 7/image/car.tif", cv2.IMREAD_GRAYSCALE)
imgLen = cv2.imread("/Meu Drive/Faculdade/Aula/2023.2/Processamento Digital de Imagem/Aulas/Aula 7/image/Lena.png", cv2.IMREAD_GRAYSCALE)
imgNS = cv2.imread("/Meu Drive/Faculdade/Aula/2023.2/Processamento Digital de Imagem/Aulas/Aula 7/image/newspaper_shot_woman.tif", cv2.IMREAD_GRAYSCALE)
imgPeriodic = cv2.imread("/Meu Drive/Faculdade/Aula/2023.2/Processamento Digital de Imagem/Aulas/Aula 7/image/periodic_noise.png", cv2.IMREAD_GRAYSCALE)
imgSinc = cv2.imread("/Meu Drive/Faculdade/Aula/2023.2/Processamento Digital de Imagem/Aulas/Aula 7/image/sinc.png", cv2.IMREAD_GRAYSCALE)

Função para calcular e plotar o espectro 3D

In [ ]:
def plotar_espectro_3D(imagem, titulo):
    # Calcule a Transformada de Fourier 2D da imagem
    transformada_fourier = np.fft.fft2(imagem)

    # Calcule o espectro 2D
    espectro_2D = np.fft.fftshift(transformada_fourier)

    # Calcule o espectro de magnitude
    espectro_magnitude = np.abs(espectro_2D)

    # Crie uma grade de coordenadas para o espectro 3D
    x = np.fft.fftshift(np.fft.fftfreq(imagem.shape[1]))
    y = np.fft.fftshift(np.fft.fftfreq(imagem.shape[0]))
    X, Y = np.meshgrid(x, y)

    # Plote o espectro 3D
    fig = plt.figure(figsize=(10, 8))
    ax = fig.add_subplot(111, projection='3d')
    ax.set_title('Espectro 3D - ' + titulo)
    ax.plot_surface(X, Y, np.log(1 + espectro_magnitude), cmap='viridis')

    plt.show()

Plotando Imagem Carro

In [ ]:
plotar_espectro_3D(imgCar, "imgCar")
No description has been provided for this image

Plotando Imagem Lena¶

In [ ]:
plotar_espectro_3D(imgLen, "imgLen")
No description has been provided for this image

Plotando imagem newspaper_shot_woman¶

In [ ]:
plotar_espectro_3D(imgNS, "imgNS")
No description has been provided for this image

Plotando Imagem periodic_noise¶

In [ ]:
plotar_espectro_3D(imgPeriodic, "imgPeriodic")
No description has been provided for this image

Plotando Imagem Sinc¶

In [ ]:
plotar_espectro_3D(imgSinc,"imgSinc")
No description has been provided for this image